home *** CD-ROM | disk | FTP | other *** search
/ Amiga Games: Greatest Hits 1996 / Amiga Games: Greatest Hits 1996.iso / spiele / publicdomain / amigamud-tt / mystuff / lockers.m < prev    next >
Text File  |  1996-07-08  |  5KB  |  206 lines

  1. /*
  2.  * lockers.m - create locker code
  3.  */
  4.  
  5. private tp_locker CreateTable().
  6.  
  7. use t_util.
  8. use t_base.
  9. use tp_verbs
  10. use tp_locker.
  11.  
  12.  
  13. define tp_locker p_rLockers CreateThingListProp().
  14. define tp_locker p_oLockerContents CreateThingListProp().
  15. define tp_locker p_oLockerOwner CreateThingProp().
  16.  
  17.  
  18. define tp_locker proc lockerGetList(thing me, here)thing:
  19.   list thing lt;
  20.   int count, i;
  21.   thing locker;
  22.  
  23.   lt := here@p_rLockers;
  24.   if lt = nil then
  25.     locker:=nil;
  26.   else
  27.     count := Count(lt);
  28.     i := 0;
  29.     while
  30.       if i = count then
  31.     false
  32.       else
  33.     locker := lt[i];
  34.     locker@p_oLockerOwner ~= me
  35.       fi
  36.     do
  37.       i := i + 1;
  38.     od;
  39.     if i = count then
  40.       locker:=nil;
  41.     fi;
  42.   fi;
  43.   locker
  44. corp
  45.  
  46.  
  47. define tp_locker proc lockerPut()void:
  48.   thing me,here,locker,what;
  49.   string whatName,s,fname;
  50.   status st;
  51.  
  52.   me:=Me();
  53.   here:=Here();
  54.  
  55.   s:=GetTail();
  56.   if s="" then
  57.     Print("You must specify what you want to checkin.\n");
  58.   else
  59.     whatName := GetNounPhrase(G,s,0);
  60.     st := FindName(me@p_pCarrying, p_oName, whatName);
  61.     if st = succeed then
  62.       what := FindResult();
  63.  
  64.       locker:=lockerGetList(me,here);
  65.       if locker = nil then
  66.     locker:=CreateThing(nil);
  67.     locker@p_oLockerOwner:=me;
  68.     locker@p_oLockerContents:=CreateThingList();
  69.     AddTail(here@p_rLockers,locker);
  70.     Print("Allocating a new locker for \"" + me@p_pName + "\".\n");
  71.       fi;
  72.  
  73.       AddTail(locker@p_oLockerContents, what);
  74.       DelElement(me@p_pCarrying, what);
  75.       what -- p_oCarryer;
  76.       what@p_oWhere := here;
  77.       fname:=FormatName(what@p_oName);
  78.       Print("You deposit the " + fname + " safely in your locker\n");
  79.       if not me@p_pHidden and CanSee(here, me) then
  80.     OPrint(Capitalize(me@p_pName) + AAn(" stores ",fname) + " in a locker.\n");
  81.       fi;
  82.     elif st = continue then
  83.       Print(whatName + " is ambiguous.\n");
  84.     else
  85.       Print(AAn("You are not carrying", s) + ".\n");
  86.     fi
  87.   fi;
  88. corp
  89.  
  90.  
  91. define tp_locker proc lockerGet()void:
  92.   thing me, here, locker, what;
  93.   string whatName, tail, noun;
  94.   list thing lt;
  95.   list thing carrying;
  96.   status st;
  97.   bool bo;
  98.  
  99.   me:=Me();
  100.   here:=Here();
  101.  
  102.   locker:=lockerGetList(me,here);
  103.   if locker ~= nil then
  104.     lt:=locker@p_oLockerContents;
  105.     tail := GetTail();
  106.     noun := GetNounPhrase(G,tail,0);
  107.     st := FindName(lt, p_oName, noun);
  108.     if st=succeed then
  109.       what := FindResult();
  110.       bo:=CarryItem(what);
  111.       if bo=true then
  112.     whatName := FormatName(what@p_oName);
  113.     Print(whatName + ": taken.\n");
  114.      if not me@p_pHidden and CanSee(here, me) then
  115.       OPrint(Capitalize(me@p_pName) + AAn(" takes ",whatName) + " from a locker.\n");
  116.     fi;
  117.     what -- p_oWhere;
  118.     DelElement(lt, what);
  119.       fi
  120.     elif st = continue then
  121.       Print(tail + " is ambiguous here.\n");
  122.     else
  123.       Print("There is no " + tail + " in your locker\n");
  124.     fi;
  125.   else
  126.     Print("I'm sorry, this locker room does not have a locker for \"" + me@p_pName + "\".\n");
  127.   fi;
  128. corp
  129.  
  130.  
  131. define tp_locker proc lockerLook()void:
  132.   thing me,locker;
  133.  
  134.   me:=Me();
  135.   locker:=lockerGetList(me,Here());
  136.  
  137.   if locker ~= nil then
  138.     ignore ShowList(locker@p_oLockerContents, "In your locker, you have the following items:\n");
  139.     if not me@p_pHidden and CanSee(Here(), me) then
  140.       OPrint(Capitalize(me@p_pName) + " peers inside a locker.\n");
  141.     fi;
  142.   else
  143.     Print("I'm sorry, this locker room does not have a locker for \"" + me@p_pName + "\".\n");
  144.   fi;
  145. corp;
  146.  
  147.  
  148. define tp_locker proc lockerHelp()void:
  149.   Print("The additional commands for this locker room are:\n" +
  150.     "  CHECK    : Shows you whats in your locker\n"       +
  151.     "  CHECKIN  : Stores an object in your locker\n"      +
  152.     "  CHECKOUT : Retrieves an object from your locker\n");
  153. corp;
  154.  
  155. /*
  156.  * make this one utility, so people can only do it to their own rooms.
  157.  */
  158.  
  159. define t_util proc utility MakeLocker(thing room)void:
  160.   if room=nil then
  161.     room:=Here();
  162.   fi;
  163.   room@p_rLockers := CreateThingList();
  164.   AddSpecialCommand(room, "check", lockerLook);
  165.   AddSpecialCommand(room, "checkout", lockerGet);
  166.   AddSpecialCommand(room, "checkin", lockerPut);
  167.   AddSpecialCommand(room, "help", lockerHelp);
  168. corp;
  169.  
  170.  
  171. define t_util proc Islocker(thing room)bool:
  172.   if room=nil then
  173.     room:=Here();
  174.   fi;
  175.   room@p_rLockers ~= nil
  176. corp;
  177.  
  178.  
  179. define t_util proc utility Unmakelocker(thing room)status:
  180.   list thing lockers;
  181.  
  182.   if room=nil then
  183.     room:=Here();
  184.   fi;
  185.  
  186.   lockers := room@p_rLockers;
  187.   if lockers = nil then
  188.     continue
  189.   elif Count(lockers) ~= 0 then
  190.     fail
  191.   else
  192.     ignore RemoveSpecialCommand(room, "check", lockerLook);
  193.     ignore RemoveSpecialCommand(room, "checkin", lockerPut);
  194.     ignore RemoveSpecialCommand(room, "checkout", lockerGet);
  195.     ignore RemoveSpecialCommand(room, "help", lockerHelp);
  196.     room -- p_rLockers;
  197.     succeed
  198.   fi
  199. corp;
  200.  
  201. unuse tp_locker.
  202. unuse t_util.
  203. unuse t_base.
  204. unuse tp_verbs
  205.  
  206.